﻿using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;

namespace Inference
{
	public delegate List<TreeNode> GetTargetsMethod(TreeNode current);

	public class TreeViewHighlighter
	{
		public TreeViewHighlighter(TargetNodesGroups TargetNodesGroup, Color HighlightColor, Color ClearColor, bool Enabled, GetTargetsMethod gtmDelegate)
		{
            this.TargetNodesGroup = TargetNodesGroup;
			this.HighlightColor = HighlightColor;
			this.ClearColor = ClearColor;
			this.Enabled = Enabled;
			this.GetHighlightColors = gtmDelegate;
		}

        public TargetNodesGroups TargetNodesGroup 
        { 
            get; 
            set; 
        }

		public Color HighlightColor
		{
			get;
			set;
		}
		
		public Color ClearColor
		{
			get;
			set;
		}

		public bool Enabled
		{
			get;
			set;
		}

		public GetTargetsMethod GetHighlightColors
		{
			get;
			set;
		}

		public void Apply(TreeNode current)
		{
			foreach (var tn in GetHighlightColors.Invoke(current))
			{
				tn.BackColor = HighlightColor;
			}
		}
		public void Clear(TreeNode current)
		{
			foreach (var tn in GetHighlightColors.Invoke(current))
			{
				tn.BackColor = ClearColor;
			}
		}

        public ToolStripButton CreateControlButton(System.EventHandler clickHandler)
        {
            ToolStripButton res = new ToolStripButton();
            switch (TargetNodesGroup)
            {
                case TargetNodesGroups.Brothers:
                    res.Text = "Братья";
                    res.ToolTipText = "Фреймы, имеющие общего родителя с выбранным фреймом";
                    break;
                case TargetNodesGroups.Parent:
                    res.Text = "Родитель";
                    res.ToolTipText = "Фрейм-родитель";
                    break;
                case TargetNodesGroups.Children:
                    res.Text = "Потомки";
                    res.ToolTipText = "Фреймы, для которыз выбранный фрейм является родителем";
                    break;
                case TargetNodesGroups.Next:
                    res.Text = "Следующий";
                    res.ToolTipText = "Фрейм, указанный в слоте Next";
                    break;
                case TargetNodesGroups.Previous:
                    res.Text = "Предыдущий";
                    res.ToolTipText = "Фрейм, в слоте Next которого указан выбранный фрейм";
                    break;
                case TargetNodesGroups.Sub:
                    res.Text = "Субфреймы";
                    res.ToolTipText = "Фреймы, являющиеся субфреймами выбранного фрейма";
                    break;
                case TargetNodesGroups.User:
                    res.Text = "Пользователи";
                    res.ToolTipText = "Фреймы, субфреймом которых является выбранный фрейм";
                    break;
                default:
                    break;
            }
            res.AutoSize = true;
            res.CheckOnClick = true;
            res.Checked = Enabled;
            res.Click += new System.EventHandler(res_Click);
            res.Click += clickHandler;
            res.ForeColor = HighlightColor;
            res.Font = new Font(res.Font, FontStyle.Bold);
            return res;
        }

        void res_Click(object sender, System.EventArgs e)
        {
            Enabled = (((ToolStripButton)sender).Checked);
        }
	}
}
